home *** CD-ROM | disk | FTP | other *** search
/ MacHack 1997 / MacHack 1997.toast / Hacks / Hacks ’96 / PredatorPrey / ParseDataString.c < prev    next >
Text File  |  1996-06-22  |  2KB  |  111 lines

  1. /*    ParseDataString.c    */
  2.  
  3. #ifndef __C14__
  4. #include    "PredatorPrey.h" 
  5. #endif
  6.  
  7. #include    "ParseDataString.h"
  8. #include    <fp.h>
  9.  
  10. double_t    ParseDataString(Str255 dString,short selector,short *conNum)
  11. {
  12.     double_t    result,mResult,eResult,result4,result5;
  13.     double_t    temp,mTemp,eTemp,bTemp;
  14.     char        manStr[12];
  15.     char        expStr[3];
  16.     char        baseStr[3];
  17.     char        outStr[16];
  18.     decimal        result6,result7,result8,result9;
  19.     short        expLen,conVal,i,vp,start = 0;
  20.     Boolean        floatTyp = 0;
  21.     Boolean        qHasPoint = 0;
  22.     Boolean        negExp = 0;
  23.     Boolean        posExp = 0;
  24.     short        ePlace = 0;
  25.     short        ptPlace = 0;
  26.     short        expPlace = 0;
  27.     
  28.     for(i = 1;i <= dString[0];i++)
  29.     {
  30.         if(dString[i] == 'e' || dString[i] == 'E')
  31.         {
  32.             floatTyp = 1;
  33.             ePlace = i;
  34.         }
  35.         if(dString[i] == '.')
  36.         {
  37.             qHasPoint = 1;
  38.             ptPlace = i;
  39.         }
  40.         if(dString[i] == '-')
  41.         {
  42.             negExp = 1;
  43.             expPlace = i;
  44.         }
  45.         if(dString[i] == '+')
  46.         {
  47.             posExp = 1;
  48.             expPlace = i;
  49.         }
  50.     }
  51.     
  52.     if(floatTyp)
  53.     {
  54.         for(i = 0;i < ePlace - 1;i++)
  55.         {
  56.             manStr[i] = dString[i + 1];
  57.         }
  58.         manStr[0] = ePlace - 1;
  59.         if(negExp || posExp)
  60.         {
  61.             expLen = dString[0] - expPlace;
  62.             for(i = 0;i < expLen;i++)
  63.             {
  64.                 expStr[i] = dString[expPlace + 1 + i];
  65.             }
  66.         }
  67.         else
  68.         {
  69.             expLen = dString[0] - ePlace;
  70.             for(i = 0;i < expLen;i++)
  71.             {
  72.                 expStr[i] = dString[ePlace + 1 + i];
  73.             }
  74.         }
  75.         str2dec(manStr,&start,&result7,&vp);        /*    new    */
  76.         mTemp = dec2num(&result7);                /*    new    */
  77.         start = 0;
  78.         str2dec(expStr,&start,&result8,&vp);        /*    new    */
  79.         eTemp = dec2num(&result8);                /*    new    */
  80.         bTemp = 10;
  81.         eResult = pow(bTemp,eTemp);        /*    eResult is type double_t    */
  82.         if(negExp)
  83.         {
  84.             temp = mTemp / eResult;
  85.         }
  86.         else
  87.         {
  88.             temp = mTemp * eResult;
  89.         }
  90.     }
  91.     else
  92.     {
  93.         if(qHasPoint)
  94.         {
  95.             ;
  96.         }
  97.         else
  98.         {
  99.             dString[++dString[0]] = '.';
  100.             dString[++dString[0]] = '0';
  101.         }
  102.         for(i = 0;i <dString[0];i++)
  103.         {
  104.             outStr[i] = dString[i + 1];
  105.         }
  106.         str2dec(outStr,&start,&result6,&vp);
  107.         temp = dec2num(&result6);        /*    new    */
  108.     }
  109.     return(temp);
  110. }            /*    end of ParseDataString    */
  111.